# 导入Flask框架和相关模块，包括重定向、URL生成、会话管理和请求处理功能
from flask import Flask, redirect, url_for, session, request

# 创建Flask应用实例，__name__参数表示当前模块的名称
app = Flask(__name__)
# 设置应用密钥，用于加密会话数据，确保会话安全
app.secret_key = "your-secret-key"


# 定义管理员检查函数，通过会话中的用户名判断是否为管理员
def is_admin():
    # 从会话中获取用户名，如果等于'admin'则返回True，否则返回False
    return session.get("username") == "admin"


# 定义管理员页面路由，当用户访问/admin路径时调用此函数
@app.route("/admin")
def admin():
    # 检查用户是否为管理员，如果不是则重定向到登录页面
    if not is_admin():
        return redirect(url_for("login"))
    # 如果是管理员，返回管理员页面内容
    return "管理员页面"


# 定义登录页面路由，支持GET和POST两种请求方法
@app.route("/login", methods=["GET", "POST"])
def login():
    # 如果是POST请求，处理登录表单提交
    if request.method == "POST":
        # 从表单中获取用户输入的用户名和密码
        username = request.form["username"]
        password = request.form["password"]
        # 验证用户名和密码是否正确（这里使用硬编码的admin/admin123）
        if username == "admin" and password == "admin123":
            # 登录成功，将用户名存储到会话中
            session["username"] = username
            # 重定向到管理员页面
            return redirect(url_for("admin"))
        # 登录失败，返回错误信息
        return "登录失败，请重试"
    # 如果是GET请求，返回登录表单HTML
    return """
        <form method="post">
            <p>用户名: <input type="text" name="username"></p>
            <p>密码: <input type="password" name="password"></p>
            <p><input type="submit" value="登录"></p>
        </form>
    """


# 定义登出路由，当用户访问/logout路径时调用此函数
@app.route("/logout")
def logout():
    # 从会话中删除用户名，清除用户登录状态
    session.pop("username", None)
    # 重定向到登录页面
    return redirect(url_for("login"))


# 判断当前脚本是否作为主程序直接运行（而不是被其他模块导入）
if __name__ == "__main__":
    # 启动Flask开发服务器，开始监听HTTP请求，默认端口为5000
    app.run()
